1 Introduction
Bienvenue !
Cet atelier est une approche pratique de la visualisation de données et de la révision de certaines fonctions {dplyr} avec lesquelles vous êtes déjà familier.
Les notes de cours de cette semaine sont liées ci-dessous. Elles peuvent être très utiles pour accomplir l’exercice, n’hésitez donc pas à vous y référer pendant l’atelier !
2 Configuration pour l’exercice
Téléchargez d’abord le dépôt sur votre ordinateur local. Pour commencer, téléchargez, décompressez et parcourez le dossier d’exercice.
Ouvrez le projet RStudio en cliquant sur le fichier .Rproj pertinent dans le dossier de l’atelier décompressé. Assurez-vous d’avoir ouvert week_08_workshop.Rproj dans RStudio en regardant le nom de votre fenêtre RStudio, ou dans le coin supérieur droit de votre écran.
Ouvrez le fichier Rmd de l’exercice. Accédez à l’onglet Fichiers dans RStudio et ouvrez le dossier “rmd”. Vous travaillerez dans le fichier appelé “week_08_exercise.Rmd”. Cet Rmd contient à la fois les instructions et l’exercice de l’atelier dans un seul fichier.
Complétez l’exercice. Suivez les étapes dans “week_08_exercise.Rmd”. Remplacez chaque instance de
"ÉCRIVEZ_VOTRE_CODE_ICI"par vos réponses. L’exercice doit être soumis individuellement, mais vous êtes encouragé à réfléchir en groupe. Bien que vous soyez autorisé à travailler avec des membres du groupe, il est important que tout le code que vous soumettez soit tapé par vous-même.
3 Qu’est-ce que les Graphiques à Bulles?
Un graphique à bulles est un type de graphique de dispersion où une troisième dimension est ajoutée : une variable numérique supplémentaire est représentée par la taille des points.
En février 2006, un médecin suédois et défenseur des données nommé Hans Rosling a donné une célèbre conférence TED intitulée “Les meilleures statistiques que vous ayez jamais vues” où il a présenté des données économiques, sanitaires et de développement mondiales compilées par la Fondation Gapminder.
La conférence présentait un célèbre graphique à bulles similaire à celui-ci :
Ici, les points affichent une relation entre deux variables numériques sur chaque axe, ainsi qu’une troisième variable numérique : la taille de la bulle représente la population.
Remarquez que l’axe des x utilise une échelle logarithmique, pas une échelle linéaire. Cela permet d’éviter d’encombrer les points. Dans cet exercice, nous allons transformer les axes de notre graphique afin de reproduire le graphique à bulles de Gapminder aussi fidèlement que possible.
4 Packages
Pour commencer, chargez les packages nécessaires : {tidyverse}, {here}, {plotly} et {gapminder}.
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## here() starts at C:/Users/congo/Desktop/MY_APPS/R/week_08_workshop
##
## Attachement du package : 'plotly'
##
## L'objet suivant est masqué depuis 'package:ggplot2':
##
## last_plot
##
## L'objet suivant est masqué depuis 'package:stats':
##
## filter
##
## L'objet suivant est masqué depuis 'package:graphics':
##
## layout
5 Données Gapminder
Le package R {gapminder}, que nous venons de charger, contient des données économiques, sanitaires et de développement mondiales compilées par la Fondation Gapminder.
Exécutez le code suivant pour charger le cadre de données
gapminder du package {gapminder} :
# Indiquez à R d'obtenir le cadre de données intégré du package
# Charger les données
data(gapminder, package="gapminder")
gapminder## # A tibble: 1,704 × 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
## 7 Afghanistan Asia 1982 39.9 12881816 978.
## 8 Afghanistan Asia 1987 40.8 13867957 852.
## 9 Afghanistan Asia 1992 41.7 16317921 649.
## 10 Afghanistan Asia 1997 41.8 22227415 635.
## # ℹ 1,694 more rows
## Rows: 1,704
## Columns: 6
## $ country <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", …
## $ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, …
## $ year <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, …
## $ lifeExp <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.8…
## $ pop <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12…
## $ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, …
## country continent year lifeExp
## Afghanistan: 12 Africa :624 Min. :1952 Min. :23.60
## Albania : 12 Americas:300 1st Qu.:1966 1st Qu.:48.20
## Algeria : 12 Asia :396 Median :1980 Median :60.71
## Angola : 12 Europe :360 Mean :1980 Mean :59.47
## Argentina : 12 Oceania : 24 3rd Qu.:1993 3rd Qu.:70.85
## Australia : 12 Max. :2007 Max. :82.60
## (Other) :1632
## pop gdpPercap
## Min. :6.001e+04 Min. : 241.2
## 1st Qu.:2.794e+06 1st Qu.: 1202.1
## Median :7.024e+06 Median : 3531.8
## Mean :2.960e+07 Mean : 7215.3
## 3rd Qu.:1.959e+07 3rd Qu.: 9325.5
## Max. :1.319e+09 Max. :113523.1
##
Chaque ligne de ce tableau correspond à une combinaison pays-année. Pour chaque ligne, nous avons 6 colonnes :
country: Nom du payscontinent: Région géographique du mondeyear: Année calendairelifeExp: Nombre moyen d’années qu’un enfant nouveau-né vivrait si les tendances de mortalité actuelles devaient rester les mêmespop: Population totalegdpPercap: Produit intérieur brut par personne (en dollars américains ajustés selon l’inflation)
Les fonctions glimpse() et summary()
peuvent nous en dire plus sur ces variables.
## Rows: 1,704
## Columns: 6
## $ country <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", …
## $ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, …
## $ year <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, …
## $ lifeExp <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.8…
## $ pop <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12…
## $ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, …
Cette version de l’ensemble de données
gapminder contient des informations pour
142 pays, répartis en 5 continents ou
régions du monde.
Les données sont enregistrées tous les 5 ans de 1952 à 2007 (soit un total de 12 années).
## country continent year lifeExp
## Afghanistan: 12 Africa :624 Min. :1952 Min. :23.60
## Albania : 12 Americas:300 1st Qu.:1966 1st Qu.:48.20
## Algeria : 12 Asia :396 Median :1980 Median :60.71
## Angola : 12 Europe :360 Mean :1980 Mean :59.47
## Argentina : 12 Oceania : 24 3rd Qu.:1993 3rd Qu.:70.85
## Australia : 12 Max. :2007 Max. :82.60
## (Other) :1632
## pop gdpPercap
## Min. :6.001e+04 Min. : 241.2
## 1st Qu.:2.794e+06 1st Qu.: 1202.1
## Median :7.024e+06 Median : 3531.8
## Mean :2.960e+07 Mean : 7215.3
## 3rd Qu.:1.959e+07 3rd Qu.: 9325.5
## Max. :1.319e+09 Max. :113523.1
##
Dans cette leçon, nous utiliserons le dataframe
gapminder , mais seulement les données de 2007.
Nous pouvons utiliser les fonctions {dplyr} pour manipuler l’ensemble de données et le préparer pour le tracé. Lisez le code commenté ci-dessous et complétez les étapes de manipulation des données :
# Créer un nouveau data frame appelé gapminder07
gapminder07 <- gapminder %>%
# FILTRER le data frame pour inclure uniquement les lignes de 2007
filter(year == 2007) %>%
# RETIRER la colonne year
select(-year) %>%
# RENOMMER les colonnes pour les rendre plus compréhensibles
rename(life_expectancy = lifeExp,
population = pop,
gdp_per_capita = gdpPercap) %>%
# RÉORGANISER le jeu de données par taille DESCENDANTE de la population (ceci sera utile pour le tracé ultérieur)
arrange(desc(population))
# Afficher le nouveau sous-ensemble de données
gapminder07## # A tibble: 142 × 5
## country continent life_expectancy population gdp_per_capita
## <fct> <fct> <dbl> <int> <dbl>
## 1 China Asia 73.0 1318683096 4959.
## 2 India Asia 64.7 1110396331 2452.
## 3 United States Americas 78.2 301139947 42952.
## 4 Indonesia Asia 70.6 223547000 3541.
## 5 Brazil Americas 72.4 190010647 9066.
## 6 Pakistan Asia 65.5 169270617 2606.
## 7 Bangladesh Asia 64.1 150448339 1391.
## 8 Nigeria Africa 46.9 135031164 2014.
## 9 Japan Asia 82.6 127467972 31656.
## 10 Mexico Americas 76.2 108700891 11978.
## # ℹ 132 more rows
Nous utiliserons ce nouveau dataframe gapminder07 pour
tracer le graphique à bulles.
6 Graphique de dispersion
simple avec geom_point()
Nous commencerons par un graphique de dispersion régulier montrant la relation entre deux variables numériques, puis le transformerons en un graphique à bulles à l’étape suivante.
Nous voulons visualiser la relation entre l’espérance de vie et le PIB par habitant.
Créez un graphique de dispersion, avec le PIB sur l’axe des x et l’espérance de vie sur l’axe des y :
# Graphique de dispersion simple
ggplot(gapminder07, aes(x = gdp_per_capita, y = life_expectancy)) +
geom_point()
Examinons ce graphique à travers la grammaire des graphiques :
- Les objets
geométriques - marques visuelles représentant les données - sont des points. - La variable de données gdp_per_capita est mappée
sur l’
aesthétique de la positionxdes points. - La variable de données life_expectancy est mappée
sur l’
aesthétique de la positionydes points.
Ce que nous avons créé est un graphique de dispersion simple en ajoutant ensemble les composantes suivantes :
7 Petit détour : Graphiques en tant qu’objets
Un graphique {ggplot2} peut être enregistré en tant qu’objet R nommé (comme un cadre de données), manipulé davantage, puis imprimé ou enregistré.
Nous utilisons l’opérateur d’assignation (<-) pour
enregistrer le graphique en tant qu’objet, comme nous l’avons fait avec
les jeux de données.
# Enregistrer le graphique de dispersion simple en tant qu'objet nommé
gap_plot_base <- ggplot(
data = gapminder07,
mapping = aes(
x = gdp_per_capita,
y = life_expectancy)) +
geom_point() Cela apparaîtra dans votre environnement, mais il ne sera pas imprimé.
Pour afficher le graphique, tapez simplement et exécutez le nom de l’objet :

Maintenant que vous avez votre graphique en tant qu’objet R, vous pouvez lui ajouter de nouvelles couches sans retaper le code précédent.
Par exemple, vous pouvez ajouter une ligne de meilleure ajustement à votre graphique de dispersion et l’enregistrer en tant que nouveau graphique, sans avoir à réécrire le vieux code :
# Ajouter une nouvelle couche au graphique de dispersion simple
gap_plot_02 <-gap_plot_base +
geom_smooth()
# Enregistrer le nouveau graphique en tant qu'objet
gap_plot_02 <- gap_plot_base + geom_smooth()
# Appeler le nouveau graphique
gap_plot_02## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

Plus tard dans l’exercice, vous devrez créer et stocker des graphiques en tant qu’objets.
8 Convertir en Graphique
à Bulles avec l’esthétique size
Avec {ggplot2}, les graphiques à bulles sont construits en utilisant
la fonction geom_point(), tout comme les graphiques de
dispersion. La distinction clé est qu’une troisième variable numérique
doit être mappée à l’esthétique size et fournie à
aes().
Ajoutez maintenant une variable supplémentaire,
population, et mappez-la à l’esthétique de la taille.
# Créer un graphique à bulles
ggplot(gapminder07, aes(x = gdp_per_capita,
y = life_expectancy,
size = population)) +
geom_point()
Ici, la population de chaque pays est représentée par la taille des points. La légende sera automatiquement construite par {ggplot2}, montrant comment la taille des points varie avec la taille de la population.
Maintenant, colorons les bulles par continent. Ici, la population de chaque pays est représentée par la taille des points. La légende sera automatiquement construite par {ggplot2}, montrant comment la taille des points varie avec la taille de la population.
Maintenant, colorons les bulles par continent.
# Ajouter de la couleur aux points
gap_bubble <- ggplot(gapminder07, aes(x = gdp_per_capita,
y = life_expectancy,
size = population,
color = continent)) +
geom_point(alpha = 0.5) # opacité 50%
gap_bubble
Rappelez-vous lorsque nous avons arrangé la variable de population de
gapminder07 par ordre décroissant (du plus grand au plus
petit). C’est pour que les plus petits cercles/bulles soient tracés
au-dessus des plus grands cercles/bulles. Si nous n’avions pas arrangé
la variable population, les points plus petits auraient été
couverts par les points plus grands.
Cependant, beaucoup de points se chevauchent encore, nous pouvons donc réduire l’opacité des points. Changez l’opacité des points à 50%.

Stockez le dernier graphique en tant qu’objet.
Vérifiez que gap_bubble apparaît dans votre volet
Environnement.
9 Modification des échelles
Une des couches facultatives de la grammaire des graphiques que nous
n’avons pas encore apprise est les fonctions scale_*().
scale_) vous
permettent de modifier la façon dont les mappages dans
aes() sont affichés.Dans cette section, vous pouvez simplement exécuter le code que nous avons déjà écrit pour vous. Nous utiliserons deux nouvelles fonctions d’échelle.
9.1 Contrôler la taille
des points avec scale_size()
La première chose que nous devons améliorer sur le précédent
graphique à bulles est la plage de taille des bulles.
scale_size() permet de définir la taille du point le plus
petit et le plus grand en utilisant l’argument range.
## Scale for size is already present.
## Adding another scale for size, which will replace the existing scale.
Étendre la plage de taille aide à mettre en évidence la variation de la taille de la population.
9.2 Transformation logarithmique des échelles
Le graphique à bulles Gapminder original que nous recréons a une échelle non linéaire sur l’axe des x. Cela aide en écartant les points qui sont regroupés du côté gauche du graphique.
Dans {ggplot2}, nous pouvons transformer l’axe des x en utilisant
scale_x_log10(), qui échelonne de manière logarithmique
l’axe des x (comme son nom l’indique). Nous ajouterons cette fonction en
tant que nouvelle couche après un signe +, comme d’habitude
:
Les fonctions d’échelle seront couvertes en détail dans la prochaine leçon de préparation.
9.3 Supprimer les guides d’échelle
Vous remarquerez peut-être que les guides d’échelle pour la couleur du continent et la taille de la population sur le côté gauche du graphique sont assez grands. Nous pouvons supprimer ces guides pour un look plus propre. Cela enlève certaines informations, mais nous trouverons une solution à cela dans l’étape suivante.
Exécutez le code ci-dessous pour supprimer les guides d’échelle :
9.4 Ajout d’interactivité avec {plotly}
Notre graphique à bulles actuel ne nous montre pas de quel pays chaque bulle provient, ni quelles sont la population et le PIB exacts du pays.
Une façon de communiquer cette information sans encombrer le
graphique est de le rendre interactif. La fonction
ggplotly() du package {plotly} peut convertir votre
graphique en un graphique interactif ! Regardez
“gap_bubble_interactive.html” dans le dossier “images” pour voir un
exemple de graphique interactif qui peut être créé par
ggplotly().
Votre tâche pour cette section est de découvrir comment utiliser cette fonction pour rendre votre graphique interactif, de sorte que vous puissiez survoler les points pour voir des informations supplémentaires.
# Créer un graphique interactif
gap_bubble_interactive <- ggplotly(gap_bubble03)
gap_bubble_interactiveNous ne pouvons pas enregistrer ce graphique interactif avec
ggsave(). Pour cela, nous aurons besoin de la fonction
saveWidget() du package {htmlwidgets}.
Recherchez sur le web comment utiliser cette fonction et enregistrez votre graphique interactif sous forme de fichier HTML dans le dossier “images”.
10 Conclusion
C’est tout pour cet exercice ! Nous choisirons 2 à 3 personnes pour présenter votre travail lors de l’atelier. Si vous souhaitez partager vos résultats avec la classe, veuillez en informer un instructeur.
Le représentant du groupe devrait être prêt à partager son écran et à faire une courte présentation (3-4 phrases).
Choisissez et mettez en avant un aspect de l’atelier qui serait utile et intéressant pour la classe. Par exemple, vous pouvez choisir une question que votre groupe a trouvée particulièrement difficile, et expliquer comment vous avez trouvé la solution. Ou vous pouvez afficher l’un de vos graphiques et partager quelques astuces pour une personnalisation supplémentaire.
11 Soumission : Téléchargez le fichier Rmd
Une fois que vous avez terminé les tâches ci-dessus, vous devez sauvegarder vos réponses et télécharger votre fichier Rmd d’exercice sur la page web de l’atelier. Vous devez télécharger un seul fichier Rmd avec vos réponses (ne téléchargez pas le HTML tricoté ou un dossier compressé). Assurez-vous d’inclure votre nom dans l’en-tête YAML en haut du script.
La date limite pour l’exercice est le vendredi 8 mars à 23h59 UTC.
11.1 Défi (facultatif)
Maintenant, c’est à votre tour de créer un graphique à bulles animé en utilisant le package {gganimate} ! Familiarisez-vous avec le package {gganimate} disponible ici : https://gganimate.com/. La page d’accueil du site Web contient en fait une grande partie du code dont vous aurez besoin pour ce graphique à bulles Gapminder.
## No renderer backend detected. gganimate will default to writing frames to separate files
## Consider installing:
## - the `gifski` package for gif output
## - the `av` package for video output
## and restarting the R session
gap_bubble_anim <- ggplot(gapminder,
aes(x = gdpPercap,
y = lifeExp,
size = pop,
color = continent)) +
geom_point(alpha = 0.6) +
scale_x_log10() +
transition_time(year) +
labs(title = "Année : {frame_time}",
x = "PIB par habitant (log10)",
y = "Espérance de vie",
size = "Population")
# Sauvegarde animation
# animate(gap_bubble_anim, renderer = gifski_renderer())
# anim_save("images/gap_bubble_anim.gif")Voici les étapes de base :
Installer et charger le package {gganimate}.
Créer un graphique à bulles de base similaire à celui que nous avons fait dans ce tutoriel, mais en utilisant toutes les données de gapminder, pas seulement 2007. Mappez la variable
gdpPercapsur x,lifeExpsur y, etpopsur la taille.Ajouter l’animation en incluant
transition_time(year)après les couches du graphique de dispersion. Cela créera l’animation au fil du temps.Rendre l’animation et l’enregistrer sous forme de vidéo ou de GIF.
11.2 Défi supplémentaire (facultatif)
Personnalisez davantage l’animation pour essayer de refléter l’esthétique de la vidéo de Hans Rosling ici.
Ajoutez un gros indicateur pour l’année en bas à droite du graphique.
Ajustez les marqueurs d’échelle du PIB et de l’espérance de vie pour qu’ils reflètent étroitement ceux de la vidéo (25, 50, 75 ans ; 400, 4000, 40000 USD).
Ajoutez une coloration des continents qui reflète celle de la vidéo
Nous n’avons pas couvert beaucoup de ces éléments, mais voyez si vous pouvez assembler les étapes en lisant la documentation pour {gganimate}, en demandant de l’aide à GPT-4, et en recherchant en ligne avec Bing.